\section{Conclusioni}

Come si evince da questa relazione, il lavoro di realizzazione dell'elaborato per l'esame di Analisi Immagini e Video si è finalizzato in approfondimenti teorici e sperimentazioni pratiche volte a consolidare quanto studiato durante il corso, in modo particolare quanto affrontato relativamente all'analisi e tracking di video. 

L'elaborato è stato caratterizzato da una prima fase di approfondimento teorico dell'argomento, sotto la coordinazione e la guida di Walter Nunziati del MICC, che ha reso noti quali fossero gli articoli scientifici, bagaglio conoscitivo di partenza da aggiungere alle nozioni di base del corso. In particolare, segnalandoci \cite{kalman-intro} e \cite{condensation} l'attenzione si è focalizzata sulle tecniche di tracking video, facendo nascere l'idea di sviluppare un software, che consentisse di effettuare un confronto empirico sulle effettive prestazioni di questi due algoritmi.

L'obiettivo di tutto il lavoro era quindi quello di riportare risultati comparativi sotto condizioni specifiche, in particolare cercando di capire quali fossero le condizioni di lavoro ottimali dei due approcci, per riuscire a documentare quale fosse il comportamento di entrambi in queste condizioni (occlusioni, non linearità, accelerazioni etc.).

Per riuscire a realizzare quanto appena descritto, si è reso indispensabile realizzare un software che implementasse i due algoritmi di tracking. Come prevedibile questo lavoro ha rivestito il ruolo di maggior importanza nel processo realizzativo. Il software è stato sviluppato con il linguaggio di programmazione C++, sfruttando le librerie opensource per lo sviluppo in ambito di \emph{Computer Vision} OpenCV \cite{opencv}. Lo sviluppo software si è dimostrato di valenza importantissima nell'arco del lavoro in quanto non solo ha fornito un valido strumento di valutazione per la raccolta di dati, ma ha permesso in stadio di sviluppo di rendere chiaro e attualizzato nella pratica tutto il bagaglio conoscitivo che aveva caratterizzato la prima fase.

Lungo il percorso che ha portato allo sviluppo del software, sono state affrontate in maniera specifica e profonda alcune tematiche particolari, come il background subtraction (descritto nelle sezione \ref{sec:bgsub}).

Per iniziare è stato necessario creare un sistema per ottenere la cosidetta ``groud thruth'' , cioè la misura del soggetto da tracciare, che viene presa come valore per aggiornare i due metodi.
Si è scelto come sistema un background subtraction di tipo "Mixture of Gaussian" in quanto permette una serie di benefici nel ``detecting'' del soggetto, rispetto ad una semplice e spartana differenza di maschere di immagini. I benefici sono stati i seguenti:

\begin{itemize}
\item risultati ottimali anche con video complessi da elaborare rispetto a metodi più semplici.
\item possibilità di fare il tuning dei parametri, regolabili filmato per filmato. \footnote{Un possibile sviluppo futuro potrebbe essere la creazione di un form scritto in HighGui per l'inizializzazione dei suddetti parametri all'avvio del software}
\item discreta efficienza, nonstante il metodo sia complesso, garantita anche dall'alto livello con cui viene implementato in OpenCV.
\end{itemize}

Come già accennato inizialmente, nonostante la parte più corposa e importante dell'elaborato sia quella appena descritta, questa risulta avere un senso effettivo solamente se analizzata con lo scopo di trarne risultati descrittivi, obiettivo primo di tutto il lavoro. L'analisi dettagliata di questi è stata approfonditamente documentata nella sezione \ref{sec:esperimenti}, dalla quale possono essere evinti i dati più significativi, in modo da rendere chiaro quale sia il risultato raggiunto da questo lavoro. 

I risultati forniti in questa relazione sono stati catalogati, prima selezionando i video che maggiormente riuscissero ad evidenziare i punti di forza dell'uno e dell'altro metodo, quindi per ogni video sono stati presentati i risultati relativi alla variazione di alcuni parametri determinanti \emph{tuning}. 

I parametri che sono stati variati sono la frequenza di tracking, ovvero il numero di frame che intercorrono tra due consecutive applicazioni dell'algoritmo, la tolleranza consentita alla predizione dell'algoritmo di Kalman, ed il numero di samples che vengono utilizzati per il ConDensation. Il tuning su questi parametri ci ha consentito di forzare l'utilizzo dei due algoritmi in condizioni normali ma soprattutto nelle condizioni ottimali solo di uno dei due algoritmi alla volta, in modo da studiare la risposta reciproca in questa stimolazione.

Sicuramente non è possibile stabilire con certezza quale dei due algoritmi risulti essere aprioristicamente il migliore, in quanto l'affidabilità dell'uno rispetto all'altro dipende strettamente dalle condizioni di lavoro, e soprattutto da quanto queste siano congeniali ad un approccio piuttosto che all'altro.

Forzando l'algoritmo ad andare in esecuzione per intervalli di frame maggiorni di 1, ad esempio si va a stimolare un lavoro più impegnativo per il filtro di Kalman, che infatti risulta lavorare pefettamente quando l'oggetto da tracciare rientra nella sua area di confidenza, ma perde drasticamente l'oggetto altrimenti. Il ConDensation, forte di un numero molto alto di \textit{samples}, risulta in media meno preciso, ma nei momenti in cui Kalman perde l'oggetto risulta nettamente più robusto.

Sfruttando il \textit{tuning} sulla matrice Q di Kalman è stata inoltre variata l'area di confidenza del filtro di Kalman, vincolando la dimensione dell'ellisse all'interno della quale deve cadere la posizione dell'oggetto ad un dato momento affinché questo venga considerato anche all'esecuzione al momento successivo. Questo tipo di esperimenti hanno portato ad evidenziare come il comportamento di Kalman sia quasi binario, prevedendo come casistiche o la perdita dell'oggetto, o un tracciamento pressochè perfetto, discostandosi totalmente dal ConDensation, che perde con più difficoltà l'oggetto da tracciare, ma tuttavia fornisce approssimazioni più grossolane rispetto a Kalman sulla posizione.

La tecnica di lavoro del ConDensation è stata inoltre studiata in condizioni di lavoro pessime per Kalman, quindi su traiettorie totalmente non lineari, evidenziando come un gran numero di samples consenta al filtro di adattarsi molto più velocemente a cambi di direzione repentini e spostamenti bruschi.

Di particolare importanza inoltre sono stati i risultati provenienti dal tracking con occlusione, descritti nella sezione \ref{sec:video-occ}, dove l'oggetto del tracking durante il moto poteva nascondersi dietro ad ostacoli presenti nella scena. In questa castica il filtro di Kalman tenta di predire il comportamento dell'oggetto anche nei frame in cui questo scompare, con la speranza che questo riappaia all'interno dell'area di confidenza stimata con la previsione; quando questo accade infatti il filtro lavora perfettamente, ma quando questo non accade l'oggetto risulta perso. Il ConDensation rispecchia quanto detto poco sopra, e forte dei molteplici samples fornisce un errore un po' più marcato nei momenti di buio, ma appena l'oggetto riappare lo ritraccia correttamente.

Un'ultima analisi è doveroso parlare dei risultati forniti dai confronti tra diversi comportamenti del ConDensation, al variare del numero di samples. Come prevedibile, un numero più basso di samples fornisce un comportamento meno preciso, ma come riportato anche dai grafici, numeri superiori del migliaio non hanno portato sostanziali miglioramenti all'esecuzione, costringendo però la macchina ad un notevole sforzo di calcolo.

Il lavoro compiuto si è quindi dimostrato ricco di risultati conseguiti, collezionati in tutte le modalità di esecuzione nelle quali è risultato possibile operare. Lo sviluppo del lavoro preliminare all'ottenimento dei risultati (quindi la parte teorica, la progettazione e lo sviluppo software) è stato parte fondamentale del lavoro stesso, in quanto ha contribuito con un ruolo di primo piano all'arricchimento conoscitivo necessario per affrontare lo studio empirico dei risultati e darne un valore realmente significativo. 

Il lavoro realizzato è liberamente consultabile e scaricabile presso lo spazio messo a disposizione da Google, che \textit{hosta} il progetto tramite il servizio Google Code\footnote{La pagina del progetto è http://code.google.com/p/video-tracker/ mentre per ottenere il materiale è sufficiente il comando ``svn checkout http://video-tracker.googlecode.com/svn/trunk/ video-tracker''}.
